home *** CD-ROM | disk | FTP | other *** search
/ Over 1,000 Windows 95 Programs / Over 1000 Windows 95 Programs (Microforum) (Disc 1).iso / 0446 / clisrc.zip / WINAPP.CPP < prev    next >
C/C++ Source or Header  |  1992-03-27  |  19KB  |  600 lines

  1. // winapp.cpp 1/13/91 rev.12/16/91
  2.  
  3. //#include<string.h>
  4. #include"winapp.h"
  5.  
  6. HANDLE WinApplication::ApphInstance;
  7. HANDLE WinApplication::hPrevInstance;
  8. LPSTR WinApplication::lpszCmdLine;
  9. int WinApplication::nCmdShow;
  10.  
  11. static char *szclassname = "WinApp";
  12. static char *szwinname = "WinApp::Window";
  13. char *szMDIClient = "MDIClient";
  14.  
  15. int WinApplication::Run(void)    // default message loop processing
  16.     {
  17.     MSG msg;
  18.  
  19.     while(GetMessage(&msg, NULL, 0, 0))
  20.         {
  21.         if(!UserMessageProcessing(&msg))
  22.             {
  23.             TranslateMessage(&msg);
  24.             DispatchMessage(&msg);
  25.             }
  26.         }
  27.     return msg.wParam;
  28.     }
  29.  
  30. WinClass::WinClass(void)
  31.     {
  32.     style = NOSTYLE;
  33.     lpfnWndProc = DefWindowProc;
  34.     cbClsExtra = NOEXTRABYTES;
  35.     cbWndExtra = NOEXTRABYTES;
  36.     hInstance = NULL;
  37.     hIcon = LoadIcon(NULL, IDI_APPLICATION);
  38.     hCursor = LoadCursor(NULL, IDC_ARROW);
  39.     hbrBackground = GetStockObject(WHITE_BRUSH);
  40.     lpszMenuName = NULL;
  41.     lpszClassName = NULL;
  42.     class_registered = FALSE;
  43.     }
  44.  
  45. void WinClass::ClassRegister(void)
  46.     {
  47.         // since 'this' is derived from WNDCLASS, it's passed as one
  48.     RegisterClass(this);
  49.     class_registered = TRUE;
  50.     }
  51.  
  52. BOOL WinClass::ClassRegistered(void)   
  53.     { 
  54.     if(class_registered)
  55.         return TRUE;
  56.     if(!lpszClassName || !hInstance)
  57.         return FALSE;
  58.  
  59.     WNDCLASS wndclass;
  60.     
  61.     if(GetClassInfo(hInstance,lpszClassName,&wndclass))
  62.         {
  63.         LPSTR menuName = lpszMenuName;
  64.         HANDLE hInst = hInstance;
  65.         LPSTR className = lpszClassName;
  66.         WNDCLASS *wc = this;
  67.         *wc = wndclass;         // structure assignment
  68.         lpszClassName = className;
  69.         lpszMenuName = menuName;
  70.         hInstance = hInst;
  71.         return class_registered = TRUE;
  72.         }
  73.     return FALSE;
  74.     }
  75.  
  76.  
  77. WinHandle::WinHandle(void)
  78.     {
  79.     hWnd = NULL;
  80.     classname = (LPSTR)szclassname;
  81.     windowname = (LPSTR)szwinname;
  82.     winstyle = 0;
  83.     upper_left_x = upper_left_y = winwidth = winheight = 0;
  84.     winParent = NULL;
  85.     menu = NULL;
  86.     hInstance = 0;
  87.     lpParam = NULL;
  88.     }
  89.  
  90. BOOL WinHandle::Create(void)
  91.     {
  92.     if(hWnd)    // if window's already created, return TRUE
  93.         return TRUE;
  94.  
  95.     hWnd = CreateWindow(classname,windowname,winstyle,upper_left_x,
  96.         upper_left_y,winwidth,winheight,winParent,menu,hInstance,
  97.         lpParam);
  98.  
  99.     return (hWnd ? TRUE : FALSE);
  100.     }
  101.  
  102. Window::Window(char *winname)
  103.     {
  104.     SetClassInstance();         // insert instance handle
  105.     SetWinInstance(GetInstance());
  106.     SetClassName(winname);
  107.     SetWinName(winname);
  108.     DefaultDisplay();
  109.     previously_visible = FALSE;
  110.     hWnd = 0;
  111.     SetClassWinXbytes(WINAPP_RESERVED);
  112.     lpfnWndProc = WinAppWndProc;
  113.     };
  114.  
  115.     // displays window and creates if not already created
  116. BOOL Window::Display(void)
  117.     {
  118.     Register();
  119.     if(!Create())
  120.         return FALSE;
  121.     Show();
  122.     Update();
  123.     return TRUE;
  124.     }
  125.  
  126. BOOL Window::Display(int display_style)
  127.     {
  128.     current_display = display_style;
  129.     return Display();
  130.     }
  131.  
  132. BOOL Window::ClassRegistered(void)
  133.     {
  134.     if(WinClass::ClassRegistered())
  135.         return TRUE;
  136.     return FALSE;
  137.     }
  138.     // should call SetClassInstance and SetClassName if not called
  139.  
  140. void Window::Register(void)
  141.     {
  142.     if(!ClassRegistered())         // if class not registered
  143.         {
  144.         if(!GetClassName())         // if class name not set
  145.             SetClassName(classname);
  146.         ClassRegister();           // register the class
  147.         }
  148.     }
  149.  
  150. BOOL Window::Create(void)
  151.     {
  152.     Register();
  153.     WHdl.hInstance = GetInstance();
  154.     WHdl.classname = lpszClassName;
  155.     WHdl.lpParam = (LPSTR)this;
  156.     return WHdl.Create();
  157.     }
  158.  
  159. void Window::Paint(void)     // paints window
  160.     {
  161.     PAINTSTRUCT ps;
  162.  
  163.     BeginPaint(hWnd, &ps);
  164.     EndPaint(hWnd, &ps);
  165.     }
  166.  
  167. void Window::SetClassIcon(LPSTR iconname)
  168.     {
  169.     if(hInstance)
  170.         hIcon = LoadIcon(hInstance,iconname);
  171.     }
  172.  
  173.  
  174. void Window::DefWinProc(WinAppMsg& m)
  175.     {
  176.     m.msgRetVal = DefWindowProc(hWnd,m.msg,m.wParam,m.lParam);
  177.     }
  178.  
  179. void Window::WMUSER(WinAppMsg& m)         
  180.     {    
  181.     DefWinProc(m); 
  182.     m.userMsgUsed = TRUE;
  183.     }
  184.  
  185. long far pascal WinAppWndProc(HWND hWnd, WORD msg, WORD wParam, LONG lParam)
  186.     {
  187.     Window *w = (Window *)GetWindowPointer(hWnd);
  188.  
  189.     if(msg == WM_NCCREATE)
  190.         {
  191.         w = (Window *)((LPCREATESTRUCT)lParam)->lpCreateParams;
  192.         SetWindowPointer(hWnd, w);
  193.         w->SethWnd(hWnd);
  194.         }
  195.  
  196.     if(!w)
  197.         return DefWindowProc(hWnd, msg, wParam, lParam);
  198.  
  199.     WinAppMsg m;
  200.     m.msg = msg;
  201.     m.wParam = wParam;
  202.     m.lParam = lParam;
  203.     m.msgRetVal = 0L;
  204.     StdWndProc(w,m);
  205.     return m.msgRetVal;
  206.     }
  207.  
  208. void PASCAL StdWndProc(Window *w, WinAppMsg& m)
  209.     {
  210.     if(m.msg < WM_USER)
  211.         switch(m.msg)
  212.             {
  213. #if defined(_WM_NULL)            
  214.             case WM_NULL:               w->WMNULL(m);               break;
  215. #endif
  216. #if defined(_WM_CREATE)
  217.             case WM_CREATE:             w->WMCREATE(m);             break;
  218. #endif
  219. #if defined(_WM_DESTROY)
  220.             case WM_DESTROY:            w->WMDESTROY(m);            break;
  221. #endif
  222. #if defined(_WM_MOVE)
  223.             case WM_MOVE:               w->WMMOVE(m);               break;
  224. #endif
  225. #if defined(_WM_SIZE)
  226.             case WM_SIZE:               w->WMSIZE(m);               break;
  227. #endif
  228. #if defined(_WM_ACTIVATE)
  229.             case WM_ACTIVATE:           w->WMACTIVATE(m);           break;
  230. #endif
  231. #if defined(_WM_SETFOCUS)
  232.             case WM_SETFOCUS:           w->WMSETFOCUS(m);           break;
  233. #endif
  234. #if defined(_WM_KILLFOCUS)
  235.             case WM_KILLFOCUS:          w->WMKILLFOCUS(m);          break;
  236. #endif
  237. #if defined(_WM_ENABLE)
  238.             case WM_ENABLE:             w->WMENABLE(m);             break;
  239. #endif
  240. #if defined(_WM_SETREDRAW)
  241.             case WM_SETREDRAW:          w->WMSETREDRAW(m);          break;
  242. #endif
  243. #if defined(_WM_SETTEXT)
  244.             case WM_SETTEXT:            w->WMSETTEXT(m);            break;
  245. #endif
  246. #if defined(_WM_GETTEXT)
  247.             case WM_GETTEXT:            w->WMGETTEXT(m);            break;
  248. #endif
  249. #if defined(_WM_GETTEXTLENGTH)
  250.             case WM_GETTEXTLENGTH:      w->WMGETTEXTLENGTH(m);      break;
  251. #endif
  252. #if defined(_WM_PAINT)
  253.             case WM_PAINT:              w->WMPAINT(m);              break;
  254. #endif
  255. #if defined(_WM_CLOSE)
  256.             case WM_CLOSE:              w->WMCLOSE(m);              break;
  257. #endif
  258. #if defined(_WM_QUERYENDSESSION)
  259.             case WM_QUERYENDSESSION:    w->WMQUERYENDSESSION(m);    break;
  260. #endif
  261. #if defined(_WM_QUIT)
  262.             case WM_QUIT:               w->WMQUIT(m);               break;
  263. #endif
  264. #if defined(_WM_QUERYOPEN)
  265.             case WM_QUERYOPEN:          w->WMQUERYOPEN(m);          break;
  266. #endif
  267. #if defined(_WM_ERASEBKGND)
  268.             case WM_ERASEBKGND:         w->WMERASEBKGND(m);         break;
  269. #endif
  270. #if defined(_WM_SYSCOLORCHANGE)
  271.             case WM_SYSCOLORCHANGE:     w->WMSYSCOLORCHANGE(m);     break;
  272. #endif
  273. #if defined(_WM_ENDSESSION)
  274.             case WM_ENDSESSION:         w->WMENDSESSION(m);         break;
  275. #endif
  276. #if defined(_WM_SHOWWINDOW)
  277.             case WM_SHOWWINDOW:         w->WMSHOWWINDOW(m);         break;
  278. #endif
  279. #if defined(_WM_CTLCOLOR)
  280.             case WM_CTLCOLOR:           w->WMCTLCOLOR(m);           break;
  281. #endif
  282. #if defined(_WM_WININICHANGE)
  283.             case WM_WININICHANGE:       w->WMWININICHANGE(m);       break;
  284. #endif
  285. #if defined(_WM_DEVMODECHANGE)
  286.             case WM_DEVMODECHANGE:      w->WMDEVMODECHANGE(m);      break;
  287. #endif
  288. #if defined(_WM_ACTIVATEAPP)
  289.             case WM_ACTIVATEAPP:        w->WMACTIVATEAPP(m);        break;
  290. #endif
  291. #if defined(_WM_FONTCHANGE)
  292.             case WM_FONTCHANGE:         w->WMFONTCHANGE(m);         break;
  293. #endif
  294. #if defined(_WM_TIMECHANGE)
  295.             case WM_TIMECHANGE:         w->WMTIMECHANGE(m);         break;
  296. #endif
  297. #if defined(_WM_CANCELMODE)
  298.             case WM_CANCELMODE:         w->WMCANCELMODE(m);         break;
  299. #endif
  300. #if defined(_WM_SETCURSOR)
  301.             case WM_SETCURSOR:          w->WMSETCURSOR(m);          break;
  302. #endif
  303. #if defined(_WM_MOUSEACTIVATE)
  304.             case WM_MOUSEACTIVATE:      w->WMMOUSEACTIVATE(m);      break;
  305. #endif
  306. #if defined(_WM_CHILDACTIVATE)
  307.             case WM_CHILDACTIVATE:      w->WMCHILDACTIVATE(m);      break;
  308. #endif
  309. #if defined(_WM_QUEUESYNC)
  310.             case WM_QUEUESYNC:          w->WMQUEUESYNC(m);          break;
  311. #endif
  312. #if defined(_WM_GETMINMAXINFO)
  313.             case WM_GETMINMAXINFO:      w->WMGETMINMAXINFO(m);      break;
  314. #endif
  315. #if defined(_WM_PAINTICON)
  316.             case WM_PAINTICON:          w->WMPAINTICON(m);          break;
  317. #endif
  318. #if defined(_WM_ICONERASEBKGND)
  319.             case WM_ICONERASEBKGND:     w->WMICONERASEBKGND(m);     break;
  320. #endif
  321. #if defined(_WM_NEXTDLGCTL)
  322.             case WM_NEXTDLGCTL:         w->WMNEXTDLGCTL(m);         break;
  323. #endif
  324. #if defined(_WM_SPOOLERSTATUS)
  325.             case WM_SPOOLERSTATUS:      w->WMSPOOLERSTATUS(m);      break;
  326. #endif
  327. #if defined(_WM_DRAWITEM)
  328.             case WM_DRAWITEM:           w->WMDRAWITEM(m);           break;
  329. #endif
  330. #if defined(_WM_MEASUREITEM)
  331.             case WM_MEASUREITEM:        w->WMMEASUREITEM(m);        break;
  332. #endif
  333. #if defined(_WM_DELETEITEM)
  334.             case WM_DELETEITEM:         w->WMDELETEITEM(m);         break;
  335. #endif
  336. #if defined(_WM_VKEYTOITEM)
  337.             case WM_VKEYTOITEM:         w->WMVKEYTOITEM(m);         break;
  338. #endif
  339. #if defined(_WM_CHARTOITEM)
  340.             case WM_CHARTOITEM:         w->WMCHARTOITEM(m);         break;
  341. #endif
  342. #if defined(_WM_SETFONT)
  343.             case WM_SETFONT:            w->WMSETFONT(m);            break;
  344. #endif
  345. #if defined(_WM_GETFONT)
  346.             case WM_GETFONT:            w->WMGETFONT(m);            break;
  347. #endif
  348. #if defined(_WM_QUERYDRAGICON)
  349.             case WM_QUERYDRAGICON:      w->WMQUERYDRAGICON(m);      break;
  350. #endif
  351. #if defined(_WM_COMPAREITEM)
  352.             case WM_COMPAREITEM:        w->WMCOMPAREITEM(m);        break;
  353. #endif
  354. #if defined(_WM_COMPACTING)
  355.             case WM_COMPACTING:         w->WMCOMPACTING(m);         break;
  356. #endif
  357. #if defined(_WM_NCCREATE)
  358.             case WM_NCCREATE:           w->WMNCCREATE(m);           break;
  359. #endif
  360. #if defined(_WM_NCDESTROY)
  361.             case WM_NCDESTROY:          w->WMNCDESTROY(m);          break;
  362. #endif
  363. #if defined(_WM_NCCALCSIZE)
  364.             case WM_NCCALCSIZE:         w->WMNCCALCSIZE(m);         break;
  365. #endif
  366. #if defined(_WM_NCHITTEST)
  367.             case WM_NCHITTEST:          w->WMNCHITTEST(m);          break;
  368. #endif
  369. #if defined(_WM_NCPAINT)
  370.             case WM_NCPAINT:            w->WMNCPAINT(m);            break;
  371. #endif
  372. #if defined(_WM_NCACTIVATE)
  373.             case WM_NCACTIVATE:         w->WMNCACTIVATE(m);         break;
  374. #endif
  375. #if defined(_WM_GETDLGCODE)
  376.             case WM_GETDLGCODE:         w->WMGETDLGCODE(m);         break;
  377. #endif
  378. #if defined(_WM_NCMOUSEMOVE)
  379.             case WM_NCMOUSEMOVE:        w->WMNCMOUSEMOVE(m);        break;
  380. #endif
  381. #if defined(_WM_NCLBUTTONDOWN)
  382.             case WM_NCLBUTTONDOWN:      w->WMNCLBUTTONDOWN(m);      break;
  383. #endif
  384. #if defined(_WM_NCLBUTTONUP)
  385.             case WM_NCLBUTTONUP:        w->WMNCLBUTTONUP(m);        break;
  386. #endif
  387. #if defined(_WM_NCLBUTTONDBLCLK)
  388.             case WM_NCLBUTTONDBLCLK:    w->WMNCLBUTTONDBLCLK(m);    break;
  389. #endif
  390. #if defined(_WM_NCRBUTTONDOWN)
  391.             case WM_NCRBUTTONDOWN:      w->WMNCRBUTTONDOWN(m);      break;
  392. #endif
  393. #if defined(_WM_NCRBUTTONUP)
  394.             case WM_NCRBUTTONUP:        w->WMNCRBUTTONUP(m);        break;
  395. #endif
  396. #if defined(_WM_NCRBUTTONDBLCLK)
  397.             case WM_NCRBUTTONDBLCLK:    w->WMNCRBUTTONDBLCLK(m);    break;
  398. #endif
  399. #if defined(_WM_NCMBUTTONDOWN)
  400.             case WM_NCMBUTTONDOWN:      w->WMNCMBUTTONDOWN(m);      break;
  401. #endif
  402. #if defined(_WM_NCMBUTTONUP)
  403.             case WM_NCMBUTTONUP:        w->WMNCMBUTTONUP(m);        break;
  404. #endif
  405. #if defined(_WM_NCMBUTTONDBLCLK)
  406.             case WM_NCMBUTTONDBLCLK:    w->WMNCMBUTTONDBLCLK(m);    break;
  407. #endif
  408. #if defined(_WM_KEYDOWN)
  409.             case WM_KEYDOWN:            w->WMKEYDOWN(m);            break;
  410. #endif
  411. #if defined(_WM_KEYUP)
  412.             case WM_KEYUP:              w->WMKEYUP(m);              break;
  413. #endif
  414. #if defined(_WM_CHAR)
  415.             case WM_CHAR:               w->WMCHAR(m);               break;
  416. #endif
  417. #if defined(_WM_DEADCHAR)
  418.             case WM_DEADCHAR:           w->WMDEADCHAR(m);           break;
  419. #endif
  420. #if defined(_WM_SYSKEYDOWN)
  421.             case WM_SYSKEYDOWN:         w->WMSYSKEYDOWN(m);         break;
  422. #endif
  423. #if defined(_WM_SYSKEYUP)
  424.             case WM_SYSKEYUP:           w->WMSYSKEYUP(m);           break;
  425. #endif
  426. #if defined(_WM_SYSCHAR)
  427.             case WM_SYSCHAR:            w->WMSYSCHAR(m);            break;
  428. #endif
  429. #if defined(_WM_SYSDEADCHAR)
  430.             case WM_SYSDEADCHAR:        w->WMSYSDEADCHAR(m);        break;
  431. #endif
  432. #if defined(_WM_KEYLAST)
  433.             case WM_KEYLAST:            w->WMKEYLAST(m);            break;
  434. #endif
  435. #if defined(_WM_INITDIALOG)
  436.             case WM_INITDIALOG:         w->WMINITDIALOG(m);         break;
  437. #endif
  438. #if defined(_WM_COMMAND)
  439.             case WM_COMMAND:            w->WMCOMMAND(m);            break;
  440. #endif
  441. #if defined(_WM_SYSCOMMAND)
  442.             case WM_SYSCOMMAND:         w->WMSYSCOMMAND(m);         break;
  443. #endif
  444. #if defined(_WM_TIMER)
  445.             case WM_TIMER:              w->WMTIMER(m);              break;
  446. #endif
  447. #if defined(_WM_HSCROLL)
  448.             case WM_HSCROLL:            w->WMHSCROLL(m);            break;
  449. #endif
  450. #if defined(_WM_VSCROLL)
  451.             case WM_VSCROLL:            w->WMVSCROLL(m);            break;
  452. #endif
  453. #if defined(_WM_INITMENU)
  454.             case WM_INITMENU:           w->WMINITMENU(m);           break;
  455. #endif
  456. #if defined(_WM_INITMENUPOPUP)
  457.             case WM_INITMENUPOPUP:      w->WMINITMENUPOPUP(m);      break;
  458. #endif
  459. #if defined(_WM_MENUSELECT)
  460.             case WM_MENUSELECT:         w->WMMENUSELECT(m);         break;
  461. #endif
  462. #if defined(_WM_MENUCHAR)
  463.             case WM_MENUCHAR:           w->WMMENUCHAR(m);           break;
  464. #endif
  465. #if defined(_WM_ENTERIDLE)
  466.             case WM_ENTERIDLE:          w->WMENTERIDLE(m);          break;
  467. #endif
  468. #if defined(_WM_MOUSEFIRST)
  469.             case WM_MOUSEFIRST:         w->WMMOUSEMOVE(m);          break;
  470. #endif
  471. #if defined(_WM_LBUTTONDOWN)
  472.             case WM_LBUTTONDOWN:        w->WMLBUTTONDOWN(m);        break;
  473. #endif
  474. #if defined(_WM_LBUTTONUP)
  475.             case WM_LBUTTONUP:          w->WMLBUTTONUP(m);          break;
  476. #endif
  477. #if defined(_WM_LBUTTONDBLCLK)
  478.             case WM_LBUTTONDBLCLK:      w->WMLBUTTONDBLCLK(m);      break;
  479. #endif
  480. #if defined(_WM_RBUTTONDOWN)
  481.             case WM_RBUTTONDOWN:        w->WMRBUTTONDOWN(m);        break;
  482. #endif
  483. #if defined(_WM_RBUTTONUP)
  484.             case WM_RBUTTONUP:          w->WMRBUTTONUP(m);          break;
  485. #endif
  486. #if defined(_WM_RBUTTONDBLCLK)
  487.             case WM_RBUTTONDBLCLK:      w->WMRBUTTONDBLCLK(m);      break;
  488. #endif
  489. #if defined(_WM_MBUTTONDOWN)
  490.             case WM_MBUTTONDOWN:        w->WMMBUTTONDOWN(m);        break;
  491. #endif
  492. #if defined(_WM_MBUTTONUP)
  493.             case WM_MBUTTONUP:          w->WMMBUTTONUP(m);          break;
  494. #endif
  495. #if defined(_WM_MBUTTONDBLCLK)
  496.             case WM_MBUTTONDBLCLK:      w->WMMOUSELAST(m);          break;
  497. #endif
  498. #if defined(_WM_PARENTNOTIFY)
  499.             case WM_PARENTNOTIFY:       w->WMPARENTNOTIFY(m);       break;
  500. #endif
  501. #if defined(_WM_MDICREATE)
  502.             case WM_MDICREATE:          w->WMMDICREATE(m);          break;
  503. #endif
  504. #if defined(_WM_MDIDESTROY)
  505.             case WM_MDIDESTROY:         w->WMMDIDESTROY(m);         break;
  506. #endif
  507. #if defined(_WM_MDIACTIVATE)
  508.             case WM_MDIACTIVATE:        w->WMMDIACTIVATE(m);        break;
  509. #endif
  510. #if defined(_WM_MDIRESTORE)
  511.             case WM_MDIRESTORE:         w->WMMDIRESTORE(m);         break;
  512. #endif
  513. #if defined(_WM_MDINEXT)
  514.             case WM_MDINEXT:            w->WMMDINEXT(m);            break;
  515. #endif
  516. #if defined(_WM_MDIMAXIMIZE)
  517.             case WM_MDIMAXIMIZE:        w->WMMDIMAXIMIZE(m);        break;
  518. #endif
  519. #if defined(_WM_MDITILE)
  520.             case WM_MDITILE:            w->WMMDITILE(m);            break;
  521. #endif
  522. #if defined(_WM_MDICASCADE)
  523.             case WM_MDICASCADE:         w->WMMDICASCADE(m);         break;
  524. #endif
  525. #if defined(_WM_MDIICONARRANGE)
  526.             case WM_MDIICONARRANGE:     w->WMMDIICONARRANGE(m);     break;
  527. #endif
  528. #if defined(_WM_MDIGETACTIVE)
  529.             case WM_MDIGETACTIVE:       w->WMMDIGETACTIVE(m);       break;
  530. #endif
  531. #if defined(_WM_MDISETMENU)
  532.             case WM_MDISETMENU:         w->WMMDISETMENU(m);         break;
  533. #endif
  534. #if defined(_WM_CUT)
  535.             case WM_CUT:                w->WMCUT(m);                break;
  536. #endif
  537. #if defined(_WM_COPY)
  538.             case WM_COPY:               w->WMCOPY(m);               break;
  539. #endif
  540. #if defined(_WM_PASTE)
  541.             case WM_PASTE:              w->WMPASTE(m);              break;
  542. #endif
  543. #if defined(_WM_CLEAR)
  544.             case WM_CLEAR:              w->WMCLEAR(m);              break;
  545. #endif
  546. #if defined(_WM_UNDO)
  547.             case WM_UNDO:               w->WMUNDO(m);               break;
  548. #endif
  549. #if defined(_WM_RENDERFORMAT)
  550.             case WM_RENDERFORMAT:       w->WMRENDERFORMAT(m);       break;
  551. #endif
  552. #if defined(_WM_RENDERALLFORMATS)
  553.             case WM_RENDERALLFORMATS:   w->WMRENDERALLFORMATS(m);   break;
  554. #endif
  555. #if defined(_WM_DESTROYCLIPBOARD)
  556.             case WM_DESTROYCLIPBOARD:   w->WMDESTROYCLIPBOARD(m);   break;
  557. #endif
  558. #if defined(_WM_DRAWCLIPBOARD)
  559.             case WM_DRAWCLIPBOARD:      w->WMDRAWCLIPBOARD(m);      break;
  560. #endif
  561. #if defined(_WM_PAINTCLIPBOARD)
  562.             case WM_PAINTCLIPBOARD:     w->WMPAINTCLIPBOARD(m);     break;
  563. #endif
  564. #if defined(_WM_VSCROLLCLIPBOARD)
  565.             case WM_VSCROLLCLIPBOARD:   w->WMVSCROLLCLIPBOARD(m);   break;
  566. #endif
  567. #if defined(_WM_SIZECLIPBOARD)
  568.             case WM_SIZECLIPBOARD:      w->WMSIZECLIPBOARD(m);      break;
  569. #endif
  570. #if defined(_WM_ASKCBFORMATNAME)
  571.             case WM_ASKCBFORMATNAME:    w->WMASKCBFORMATNAME(m);    break;
  572. #endif
  573. #if defined(_WM_CHANGECBCHAIN)
  574.             case WM_CHANGECBCHAIN:      w->WMCHANGECBCHAIN(m);      break;
  575. #endif
  576. #if defined(_WM_HSCROLLCLIPBOARD)
  577.             case WM_HSCROLLCLIPBOARD:   w->WMHSCROLLCLIPBOARD(m);   break;
  578. #endif
  579. #if defined(_WM_QUERYNEWPALETTE)
  580.             case WM_QUERYNEWPALETTE:    w->WMQUERYNEWPALETTE(m);    break;
  581. #endif
  582. #if defined(_WM_PALETTEISCHANGING)
  583.             case WM_PALETTEISCHANGING:  w->WMPALETTEISCHANGING(m);  break;
  584. #endif
  585. #if defined(_WM_PALETTECHANGED)
  586.             case WM_PALETTECHANGED:     w->WMPALETTECHANGED(m);     break;
  587. #endif
  588.             default:                    w->DefWinProc(m);           break;            
  589.             }
  590.     else
  591.         {
  592.         m.userMsgUsed = FALSE;
  593.         w->WMUSER(m);
  594.         if(!m.userMsgUsed)
  595.             w->DefWinProc(m);
  596.         }
  597.     }
  598.  
  599.  
  600.